home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Developer Toolbox 6.1
/
SGI Developer Toolbox 6.1 - Disc 4.iso
/
public
/
plan
/
src
/
rangemenu.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-08-01
|
10KB
|
313 lines
/*
* Create and destroy the week view range menu, which allows entry of the
* time of the left and right margin of the week view. This menu is
* installed from the Config pulldown.
*
* destroy_weekrange_popup()
* create_weekrange_popup()
*/
#include <stdio.h>
#include <time.h>
#include <Xm/Xm.h>
#include <Xm/DialogS.h>
#include <Xm/Form.h>
#include <Xm/Frame.h>
#include <Xm/RowColumn.h>
#include <Xm/LabelP.h>
#include <Xm/LabelG.h>
#include <Xm/PushBP.h>
#include <Xm/PushBG.h>
#include <Xm/ToggleB.h>
#include <Xm/TextF.h>
#include <Xm/Protocols.h>
#include "cal.h"
static void warn_callback(), user_callback(), done_callback();
extern void help_callback();
extern Display *display; /* everybody uses the same server */
extern struct config config; /* global configuration data */
extern Pixel color[NCOLS]; /* colors: COL_* */
extern struct list *mainlist; /* list of all schedule entries */
static BOOL have_shell; /* message popup exists if TRUE */
static Widget shell; /* popup menu shell */
static Widget min, max; /* min and max hour text widgets */
/*
* destroy a popup. Remove it from the screen, and destroy its widgets.
* It's too much trouble to keep them for next time.
*/
destroy_weekrange_popup()
{
char *string; /* contents of text widget */
int b, e;
if (have_shell) {
string = XmTextFieldGetString(min);
b = atoi(string);
XtFree(string);
string = XmTextFieldGetString(max);
e = atoi(string);
XtFree(string);
if (e == 0) e = 24;
if (e <= b) e = e+1;
if (e > 24) e = 24;
if (e <= b) b = e-1;
config.week_minhour = b;
config.week_maxhour = e;
XtPopdown(shell);
XTDESTROYWIDGET(shell);
have_shell = FALSE;
mainlist->modified = TRUE;
draw_week_calendar();
}
}
/*
* create a week view range popup as a separate application shell. The
* popup is initialized with data from config.
*/
create_weekrange_popup()
{
Widget form, form2, w, text, help;
Arg args[20];
int n;
Atom closewindow;
destroy_weekrange_popup();
n = 0;
XtSetArg(args[n], XmNdeleteResponse, XmDO_NOTHING); n++;
XtSetArg(args[n], XmNiconic, False); n++;
shell = XtAppCreateShell("Week view range", "plan",
applicationShellWidgetClass, display, args, n);
# ifdef EDITRES
XtAddEventHandler(shell, (EventMask)0, TRUE,
_XEditResCheckMessages, NULL);
# endif
set_icon(shell, 1);
form = XtCreateManagedWidget("rangeform1", xmFormWidgetClass,
shell, NULL, 0);
XtAddCallback(form, XmNhelpCallback, help_callback,(XtPointer)"range");
/*-- buttons --*/
n = 0;
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNbottomOffset, 8); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNrightOffset, 8); n++;
XtSetArg(args[n], XmNwidth, 80); n++;
w = XtCreateManagedWidget("Done", xmPushButtonWidgetClass,
form, args, n);
XtAddCallback(w, XmNactivateCallback, done_callback, (XtPointer)0);
XtAddCallback(w, XmNhelpCallback, help_callback, (XtPointer)
"range_done");
n = 0;
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNbottomOffset, 8); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNrightWidget, w); n++;
XtSetArg(args[n], XmNrightOffset, 8); n++;
XtSetArg(args[n], XmNwidth, 80); n++;
help = XtCreateManagedWidget("Help", xmPushButtonWidgetClass,
form, args, n);
XtAddCallback(help, XmNactivateCallback, help_callback,
(XtPointer)"range");
XtAddCallback(help, XmNhelpCallback, help_callback,
(XtPointer)"range");
/*-- frame --*/
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNtopOffset, 8); n++;
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNbottomWidget, w); n++;
XtSetArg(args[n], XmNbottomOffset, 16); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftOffset, 8); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNrightOffset, 8); n++;
XtSetArg(args[n], XmNshadowType, XmSHADOW_ETCHED_IN); n++;
w = XtCreateManagedWidget("", xmFrameWidgetClass,
form, args, n);
form2 = XtCreateManagedWidget("rangeform2", xmFormWidgetClass,
w, NULL, 0);
/*-- min --*/
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNtopOffset, 18); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftOffset, 8); n++;
XtSetArg(args[n], XmNhighlightThickness,0); n++;
w = XtCreateManagedWidget("Begin week view at",
xmLabelWidgetClass, form2, args, n);
XtAddCallback(w, XmNhelpCallback, help_callback,
(XtPointer)"range_min");
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNtopOffset, 16); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNleftWidget, w); n++;
XtSetArg(args[n], XmNleftOffset, 16); n++;
XtSetArg(args[n], XmNwidth, 80); n++;
XtSetArg(args[n], XmNrecomputeSize, False); n++;
XtSetArg(args[n], XmNpendingDelete, True); n++;
XtSetArg(args[n], XmNhighlightThickness,0); n++;
XtSetArg(args[n], XmNbackground, color[COL_TEXTBACK]); n++;
min = XtCreateManagedWidget(" ", xmTextFieldWidgetClass,
form2, args, n);
XtAddCallback(min, XmNhelpCallback, help_callback,
(XtPointer)"range_min");
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNtopOffset, 18); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNleftWidget, min); n++;
XtSetArg(args[n], XmNleftOffset, 16); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNrightOffset, 8); n++;
XtSetArg(args[n], XmNhighlightThickness,0); n++;
XtCreateManagedWidget("o'clock", xmLabelWidgetClass,
form2, args, n);
XtAddCallback(w, XmNhelpCallback, help_callback,
(XtPointer)"range_min");
/*-- max --*/
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, min); n++;
XtSetArg(args[n], XmNtopOffset, 10); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftOffset, 8); n++;
XtSetArg(args[n], XmNhighlightThickness,0); n++;
w = XtCreateManagedWidget("End week view at",
xmLabelWidgetClass, form2, args, n);
XtAddCallback(w, XmNhelpCallback, help_callback,
(XtPointer)"range_max");
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, min); n++;
XtSetArg(args[n], XmNtopOffset, 8); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); n++;
XtSetArg(args[n], XmNleftWidget, min); n++;
XtSetArg(args[n], XmNwidth, 80); n++;
XtSetArg(args[n], XmNrecomputeSize, False); n++;
XtSetArg(args[n], XmNpendingDelete, True); n++;
XtSetArg(args[n], XmNhighlightThickness,0); n++;
XtSetArg(args[n], XmNbackground, color[COL_TEXTBACK]); n++;
max = XtCreateManagedWidget("", xmTextFieldWidgetClass,
form2, args, n);
XtAddCallback(max, XmNhelpCallback, help_callback,
(XtPointer)"range_max");
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, min); n++;
XtSetArg(args[n], XmNtopOffset, 10); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNleftWidget, min); n++;
XtSetArg(args[n], XmNleftOffset, 16); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNrightOffset, 8); n++;
XtSetArg(args[n], XmNhighlightThickness,0); n++;
XtCreateManagedWidget("o'clock", xmLabelWidgetClass,
form2, args, n);
XtAddCallback(w, XmNhelpCallback, help_callback,
(XtPointer)"range_max");
/*-- show warnings --*/
n = 0;
XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, max); n++;
XtSetArg(args[n], XmNtopOffset, 16); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftOffset, 8); n++;
XtSetArg(args[n], XmNhighlightThickness,0); n++;
XtSetArg(args[n], XmNset, config.weekwarn); n++;
w = XtCreateManagedWidget("Show advance-warning times",
xmToggleButtonWidgetClass,
form2, args, n);
XtAddCallback(w, XmNvalueChangedCallback, warn_callback, (XtPointer)0);
XtAddCallback(w, XmNhelpCallback, help_callback,
(XtPointer)"range_warn");
/*-- show username --*/
n = 0;
XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, w); n++;
XtSetArg(args[n], XmNtopOffset, 8); n++;
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNbottomOffset, 8); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftOffset, 8); n++;
XtSetArg(args[n], XmNhighlightThickness,0); n++;
XtSetArg(args[n], XmNset, config.weekuser); n++;
w = XtCreateManagedWidget("Show user names in bar labels",
xmToggleButtonWidgetClass,
form2, args, n);
XtAddCallback(w, XmNvalueChangedCallback, user_callback, (XtPointer)0);
XtAddCallback(w, XmNhelpCallback, help_callback,
(XtPointer)"range_user");
XtPopup(shell, XtGrabNone);
closewindow = XmInternAtom(display, "WM_DELETE_WINDOW", False);
XmAddWMProtocolCallback(shell, closewindow,
done_callback, (XtPointer)shell);
print_text_button(min, "%d", config.week_minhour);
print_text_button(max, "%d", config.week_maxhour);
have_shell = TRUE;
}
/*-------------------------------------------------- callbacks --------------*/
/*
* All of these routines are direct X callbacks.
*/
/*ARGSUSED*/
static void done_callback(widget, item, data)
Widget widget;
int item;
XmToggleButtonCallbackStruct *data;
{
destroy_weekrange_popup();
}
/*ARGSUSED*/
static void warn_callback(widget, item, data)
Widget widget;
int item;
XmToggleButtonCallbackStruct *data;
{
config.weekwarn ^= TRUE;
mainlist->modified = TRUE;
draw_week_calendar();
}
/*ARGSUSED*/
static void user_callback(widget, item, data)
Widget widget;
int item;
XmToggleButtonCallbackStruct *data;
{
config.weekuser ^= TRUE;
mainlist->modified = TRUE;
draw_week_calendar();
}